package cn.maihe.elg.operation.service.system;

import cn.maihe.elg.operation.repository.entity.BidCustomerDO;
import cn.maihe.elg.operation.repository.entity.UserDO;
import cn.maihe.elg.operation.repository.entity.entityCustom.UserDOCustom;
import cn.maihe.elg.operation.security.model.UserContext;
import cn.maihe.elg.operation.service.BaseDaoService;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * @author vladimir.stankovic
 * <p>
 * Aug 17, 2016
 */
public interface UserService {

    /**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return 用户对象
     * */
    UserDOCustom getByUsername(String username);

    /**
     * 分页查询用户列表
     * @param username 用户名
     * @param name 姓名
     * @param type
     * @param pageNum 当前页数
     * @param pageSize 每页记录数
     * @param status 状态
     * @return 分页对象
     *
     * */
    PageInfo<UserDOCustom> getUsersDoPage(String username, String name, Integer type, int pageNum, int pageSize, String status, String orgCode);

    /**
     * 根据id用户信息
     * @param id 用户编号
     * @return 用户对象
     * */
    UserDOCustom getUser(Long id);

    /**
     * 保存用户信息
     * @param user 用户对象
     * */
    void saveUser(UserDOCustom user);

    void updateUserInfo(UserDOCustom user);

    /**
     * 更新用户信息
     * @param user 用户对象
     * */
    void updateUser(UserDOCustom user);

    /**
     * 根据用户id删除用户信息
     * @param id 用户编号
     * */
    void deleteUser(Long id);

    /**
     * 修改密码
     * @param username 用户名
     * @param password 密码
     * @param rawpassword 旧密码
     * */
    void changePassword(Map<String, String> param);

    /**
     * 重置密码
     * @param id 用户编号
     * @param password 密码
     * */
    void resetPassword(Long id, String password);

    /**
     * 登录错误
     * @param user 用户
     * */
    void loginError(UserDO user);

    /**
     * 查询用户是否锁定状态
     * @param user 用户
     * @return 结果
     * */
    boolean isUserLocked(UserDO user);

    /**
     * 解锁用户状态
     * @param userId 用户编号
     * */
    void unLock(Long userId);

    /**
     * 重置登录失败次数
     * @param userId 用户编号
     * @param loginCount*/
    void resetLoginFailTimes(Long userId, int loginCount);

    /**
     * 查询用户权限列表
     * @param userId 用户编号
     * @return 功能列表
     * */
    List<String> getUserPerm(Long userId);

    /**
     * 获取当前登录的用户的信息
     * @return UserContext
     */
    UserContext getUserContext();

    List<Long> getCenterIds(String userId);

    List<Long> getInstitutionIds(String userId);

    void saveOrUpdateBidUser(UserDO userDO);

    boolean checkOrder(Long orgId, String acceptOrderNo);

    boolean checkSmsCode(String username, String smsCode);
}
